package cn.iocoder.yudao.module.erp.component;

import org.apache.commons.collections4.CollectionUtils;

import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * 通用适配器组件
 * @param <T>
 */
public interface ComponentMatcher<T> {

    /**
     * 获取组件名
     *
     * @return
     */
    default T getComponentName() {
        throw new UnsupportedOperationException("getComponentName() 未知的组件名");
    }

    /**
     * 匹配组件
     *
     * @param componentValue
     * @return
     */
    default boolean isMatched(T componentValue) {
        Objects.requireNonNull(componentValue, "参数 componentValue 不能为空");
        T componentName = getComponentName();
        if (componentName instanceof List) {
            // 只要匹配其中一个，即命中
            Collection<?> componentNames = (Collection<?>) componentName;
            Collection<?> componentValues = (Collection<?>) componentValue;

            return CollectionUtils.containsAny(componentNames, componentValues);
        }

        return Objects.equals(componentValue, componentName);
    }
}
